package gui.curso;

import gui.estudiante.DialogoEstudiantesPorCurso;

import java.awt.Color;
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.awt.print.PrinterException;

import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.RowFilter;
import javax.swing.border.TitledBorder;
import javax.swing.table.TableRowSorter;

import modelo.ModeloCurso;
import modelo.ModeloEstudiantesPorCurso;

import javax.swing.JCheckBox;

public class PanelCurso extends JPanel {

	private static final long serialVersionUID = 1L;
	private JPanel panelTableCurso = null;
	private JScrollPane jspCurso = null;
	private JTable tblCurso = null;
	private JButton btnAgregar = null;
	private JButton btnModificar = null;
	private JButton btnCambiarEstatus = null;
	private JPanel panelBuscar = null;
	private JLabel lblBuscar = null;
	private JComboBox cmbBuscar = null;
	private JTextField txtBuscar = null;
	private ModeloCurso modeloCurso = null;
	private int indiceComboBuscar = 0;
	private JCheckBox checkBoxActivo = null;
	private JCheckBox checkBoxInactivo = null;
	private JCheckBox checkBoxTodosCursos = null;
	private JButton btnVerListaEstudiante = null;
	private static int idCurso = 0;
	private static String nombreCurso = null;
	private JButton btnImprimir = null;

	/**
	 * This is the default constructor
	 */
	public PanelCurso() {
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		modeloCurso = ModeloCurso.getInstancia();
		this.setSize(884, 378);
		this.setLayout(null);
		this.add(getPanelTableCurso(), null);
		this.add(getBtnAgregar(), null);
		this.add(getBtnModificar(), null);
		this.add(getBtnCambiarEstatus(), null);
		this.add(getPanelBuscar(), null);
		this.add(getCheckBoxActivo(), null);
		this.add(getCheckBoxInactivo(), null);
		this.add(getCheckBoxTodosCursos(), null);
		this.add(getBtnVerListaEstudiante(), null);
		this.add(getBtnImprimir(), null);
	}

	/**
	 * This method initializes panelTableCiclo
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getPanelTableCurso() {
		if (panelTableCurso == null) {
			panelTableCurso = new JPanel();
			panelTableCurso.setLayout(null);
			panelTableCurso.setBounds(new Rectangle(6, 90, 871, 227));
			panelTableCurso.setBorder(BorderFactory.createTitledBorder(
					BorderFactory.createLineBorder(Color.gray, 1),
					"Lista Cursos", TitledBorder.LEFT,
					TitledBorder.DEFAULT_POSITION, new Font("Dialog",
							Font.BOLD, 14), new Color(51, 51, 51)));
			panelTableCurso.add(getJspCurso(), null);
		}
		return panelTableCurso;
	}

	/**
	 * This method initializes jspCiclo
	 * 
	 * @return javax.swing.JScrollPane
	 */
	private JScrollPane getJspCurso() {
		if (jspCurso == null) {
			jspCurso = new JScrollPane();
			jspCurso.setBounds(new Rectangle(12, 25, 850, 185));
			jspCurso.setViewportView(getTblCurso());
		}
		return jspCurso;
	}

	/**
	 * This method initializes tblCiclo
	 * 
	 * @return javax.swing.JTable
	 */
	private JTable getTblCurso() {
		if (tblCurso == null) {
			tblCurso = new JTable(modeloCurso);
		}
		return tblCurso;
	}

	/**
	 * This method initializes btnAgregar
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBtnAgregar() {
		if (btnAgregar == null) {
			btnAgregar = new JButton();
			btnAgregar.setBounds(new Rectangle(174, 331, 108, 33));
			btnAgregar.setText("Agregar");
			btnAgregar.setIcon(new ImageIcon("./lib/images/add.png"));
			btnAgregar.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					DialogoAgregarCurso dialogoAgregarCurso =DialogoAgregarCurso.getInstancia();
					dialogoAgregarCurso.setVisible(true);
					dialogoAgregarCurso=null;
				}
			});
		}
		return btnAgregar;
	}

	/**
	 * This method initializes btnModificar
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBtnModificar() {
		if (btnModificar == null) {
			btnModificar = new JButton();
			btnModificar.setBounds(new Rectangle(293, 331, 108, 33));
			btnModificar.setText("Modificar");
			btnModificar.setIcon(new ImageIcon("./lib/images/modify.png"));
			btnModificar.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					if (tblCurso.isRowSelected(tblCurso.getSelectedRow()) == false) {
						JOptionPane
								.showMessageDialog(null,
										"Debe de Seleccionar un curso para Modificarlo");
					} else {
						int id = Integer.parseInt(tblCurso.getValueAt(
								tblCurso.getSelectedRow(), 0).toString());
						
						
						DialogoModificarCurso dialogo = new DialogoModificarCurso(null, "Panel Modificar Curso", id);
						dialogo.setVisible(true);
					}
				}
			});
		}
		return btnModificar;
	}

	/**
	 * This method initializes btnEliminar
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBtnCambiarEstatus() {
		if (btnCambiarEstatus == null) {
			btnCambiarEstatus = new JButton();
			btnCambiarEstatus.setBounds(new Rectangle(412, 331, 151, 33));
			btnCambiarEstatus.setText("Cambiar Estatus");
			btnCambiarEstatus.setIcon(new ImageIcon("./lib/images/change.png"));
			btnCambiarEstatus
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e) {
							if (tblCurso.isRowSelected(tblCurso
									.getSelectedRow()) == false) {
								JOptionPane
										.showMessageDialog(null,
												"Seleccione el Curso al cual le desea Cambiar el Estatus");
							} else {
								int opcion = JOptionPane
										.showConfirmDialog(
												null,
												"<html>Esta Seguro que desea cambiarle<br> el Estatus a este Curso ?</html>",
												"Confirmando",
												JOptionPane.YES_NO_OPTION);
								if (opcion == JOptionPane.YES_OPTION) {
									int id = Integer.parseInt(tblCurso
											.getValueAt(
													tblCurso.getSelectedRow(),
													0).toString());
									modeloCurso.cambiarEstatus(id);
									JOptionPane
											.showMessageDialog(
													null,
													"El Estatus del Curso fue Cambiado satisfactoriamente",
													"Informacion",
													JOptionPane.INFORMATION_MESSAGE);
								}
							}

						}
					});
		}
		return btnCambiarEstatus;
	}

	/**
	 * This method initializes panelBuscar
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getPanelBuscar() {
		if (panelBuscar == null) {
			lblBuscar = new JLabel();
			lblBuscar.setBounds(new Rectangle(10, 21, 55, 23));
			lblBuscar.setText("Buscar:");
			panelBuscar = new JPanel();
			panelBuscar.setLayout(null);
			panelBuscar.setBounds(new Rectangle(255, 18, 445, 58));
			panelBuscar.setBorder(BorderFactory.createTitledBorder(
					BorderFactory.createLineBorder(Color.black, 1), "Busqueda",
					TitledBorder.DEFAULT_JUSTIFICATION,
					TitledBorder.DEFAULT_POSITION, new Font("SansSerif",
							Font.PLAIN, 12), Color.black));
			panelBuscar.add(lblBuscar, null);
			panelBuscar.add(getCmbBuscar(), null);
			panelBuscar.add(getTxtBuscar(), null);
		}
		return panelBuscar;
	}

	/**
	 * This method initializes cmbBuscar
	 * 
	 * @return javax.swing.JComboBox
	 */
	private JComboBox getCmbBuscar() {
		if (cmbBuscar == null) {
			cmbBuscar = new JComboBox();
			cmbBuscar.setBounds(new Rectangle(67, 21, 151, 23));
			cmbBuscar.setModel(new DefaultComboBoxModel(new String[] {
					"ID Curso", "Nombre", "Empleado", "Aula" }));
			cmbBuscar.addItemListener(new java.awt.event.ItemListener() {
				public void itemStateChanged(java.awt.event.ItemEvent e) {
					indiceComboBuscar = cmbBuscar.getSelectedIndex();
				}
			});
		}
		return cmbBuscar;
	}

	/**
	 * This method initializes txtBuscar
	 * 
	 * @return javax.swing.JTextField
	 */
	private JTextField getTxtBuscar() {
		if (txtBuscar == null) {
			txtBuscar = new JTextField();
			txtBuscar.setBounds(new Rectangle(221, 21, 210, 23));
			txtBuscar.addKeyListener(new java.awt.event.KeyAdapter() {
				public void keyReleased(java.awt.event.KeyEvent e) {
					if (e.getKeyCode() == KeyEvent.VK_BACK_SLASH) {
						getTxtBuscar().setText("");
					}
					TableRowSorter<ModeloCurso> sorter = new TableRowSorter<ModeloCurso>(
							modeloCurso);
					tblCurso.setRowSorter(sorter);
					sorter.setRowFilter(RowFilter.regexFilter("(?i)"
							.concat(getTxtBuscar().getText()),
							indiceComboBuscar));
				}
			});

		}
		return txtBuscar;
	}

	/**
	 * This method initializes checkBoxActivo
	 * 
	 * @return javax.swing.JCheckBox
	 */
	private JCheckBox getCheckBoxActivo() {
		if (checkBoxActivo == null) {
			checkBoxActivo = new JCheckBox();
			checkBoxActivo.setBounds(new Rectangle(709, 20, 131, 23));
			checkBoxActivo.setText("Cursos Activos");
			checkBoxActivo.setName("ACTIVO");
			checkBoxActivo
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e) {
							if (checkBoxActivo.isSelected() == true) {
								checkBoxInactivo.setSelected(false);
								checkBoxTodosCursos.setSelected(false);
								modeloCurso
										.actualizarTableParametros(checkBoxActivo
												.getName());
							}
						}
					});
		}
		return checkBoxActivo;
	}

	/**
	 * This method initializes checkBoxInactivo
	 * 
	 * @return javax.swing.JCheckBox
	 */
	private JCheckBox getCheckBoxInactivo() {
		if (checkBoxInactivo == null) {
			checkBoxInactivo = new JCheckBox();
			checkBoxInactivo.setBounds(new Rectangle(709, 39, 131, 23));
			checkBoxInactivo.setText("Cursos Inactivos");
			checkBoxInactivo.setName("INACTIVO");
			checkBoxInactivo
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e) {
							if (checkBoxInactivo.isSelected() == true) {
								checkBoxActivo.setSelected(false);
								checkBoxTodosCursos.setSelected(false);
								modeloCurso
										.actualizarTableParametros(checkBoxInactivo
												.getName());
							}
						}
					});
		}
		return checkBoxInactivo;
	}

	/**
	 * This method initializes checkBoxTodosCursos
	 * 
	 * @return javax.swing.JCheckBox
	 */
	private JCheckBox getCheckBoxTodosCursos() {
		if (checkBoxTodosCursos == null) {
			checkBoxTodosCursos = new JCheckBox();
			checkBoxTodosCursos.setBounds(new Rectangle(709, 58, 131, 23));
			checkBoxTodosCursos.setText("Todos los Cursos");
			checkBoxTodosCursos.setName("TODOS");
			checkBoxTodosCursos
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e) {
							if (checkBoxTodosCursos.isSelected() == true) {
								checkBoxInactivo.setSelected(false);
								checkBoxActivo.setSelected(false);
								modeloCurso
										.actualizarTableParametros(checkBoxTodosCursos
												.getName());
							}
						}
					});
		}
		return checkBoxTodosCursos;
	}

	/**
	 * This method initializes btnVerListaEstudiante
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBtnVerListaEstudiante() {
		if (btnVerListaEstudiante == null) {
			btnVerListaEstudiante = new JButton();
			btnVerListaEstudiante.setBounds(new Rectangle(575, 332, 194, 33));
			btnVerListaEstudiante.setText("Ver Lista de Estudiantes");
			btnVerListaEstudiante
					.setIcon(new ImageIcon("./lib/images/list.png"));
			btnVerListaEstudiante
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e) {
							if (tblCurso.isRowSelected(tblCurso
									.getSelectedRow()) == false) {
								JOptionPane
										.showMessageDialog(
												null,
												"<html>Debe de Seleccionar un curso para<br> ver la lista de estudiantes</html>");
							} else {
								int id = Integer.parseInt(tblCurso.getValueAt(
										tblCurso.getSelectedRow(), 0)
										.toString());
								String nombre = tblCurso.getValueAt(
										tblCurso.getSelectedRow(), 1)
										.toString();
								setIdCurso(id);

								setNombreCurso(nombre);
								ModeloEstudiantesPorCurso
										.setParametro("ACTIVO");
								ModeloEstudiantesPorCurso.getInstancia()
										.actualizarTableParametros(
												ModeloEstudiantesPorCurso
														.getParametro());
								DialogoEstudiantesPorCurso dialgoEstudiantesPorCurso = DialogoEstudiantesPorCurso
										.getInstancia();
								dialgoEstudiantesPorCurso.setVisible(true);

							}
						}
					});
		}
		return btnVerListaEstudiante;
	}

	public static int getIdCurso() {
		return idCurso;
	}

	public static void setIdCurso(int idCurso) {
		PanelCurso.idCurso = idCurso;
	}

	public static String getNombreCurso() {
		return nombreCurso;
	}

	public static void setNombreCurso(String nombreCurso) {
		PanelCurso.nombreCurso = nombreCurso;
	}

	/**
	 * This method initializes btnImprimir
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBtnImprimir() {
		if (btnImprimir == null) {
			btnImprimir = new JButton();
			btnImprimir.setBounds(new Rectangle(37, 54, 172, 28));
			btnImprimir.setText("Imprimir Lista Cursos");
			btnImprimir.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					try {
						tblCurso.print();
					} catch (PrinterException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
			});
		}
		return btnImprimir;
	}
}
